package com.winning.sx.microframework.common.util;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

public class FlowCodeUtil {

    /***
     * 默认 当前时间+4个随机数
     * @return
     */
    public static String getFlowCode() {
        return formatDateStr(new Date(), "yyyyMMddHHmmssSSS") + genRandomNum(4);
    }

    /***
     * 开始字符串+当前时间+4个随机数
     * @param startWith
     * @return
     */
    public static String getFlowCode(String startWith) {
        return startWith + formatDateStr(new Date(), "yyyyMMddHHmmssSSS") + genRandomNum(4);
    }

    /***
     * 当前时间+指定长度的随机数
     * @param randomLength
     * @return
     */
    public static String getFlowCode(int randomLength) {
        return formatDateStr(new Date(), "yyyyMMddHHmmssSSS") + genRandomNum(randomLength);
    }

    /***
     * 开始字符串+当前时间+指定长度的随机数
     * @param startWith
     * @param randomLength
     * @return
     */
    public static String getFlowCode(String startWith, int randomLength) {
        return startWith + formatDateStr(new Date(), "yyyyMMddHHmmssSSS") + genRandomNum(randomLength);
    }

    static String formatDateStr(Date date, String formatStr) {
        SimpleDateFormat df = new SimpleDateFormat(formatStr);
        return df.format(date);
    }

    static String genRandomNum(int pwd_len) {
        final int maxNum = 10;
        int i; // 生成的随机数
        int count = 0; // 生成的密码的长度
        char[] str = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
        StringBuffer pwd = new StringBuffer("");
        Random r = new Random();
        while (count < pwd_len) {
            // 生成随机数，取绝对值，防止生成负数，
            i = Math.abs(r.nextInt(maxNum)); // 生成的数最大为maxNum-1
            if (i >= 0 && i < str.length) {
                pwd.append(str[i]);
                count++;
            }
        }
        return pwd.toString();
    }
}
